package com.genesis.web.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.genesis.mall.common.PmsProductPage;
import com.genesis.mall.common.Result;
import com.genesis.mall.entity.PmsProductAttribute;
import com.genesis.mall.entity.PmsProductAttributeCategory;
import com.genesis.mall.service.IPmsProductAttributeCategoryService;
import com.genesis.mall.service.IPmsProductAttributeService;
import com.genesis.mall.dto.ProductDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 商品类型表 前端控制器
 * </p>
 *
 * @author author
 * @since 2022-08-01
 */
@RestController
//@RequestMapping("/pms-product-attribute-category")
@RequestMapping("/productAttribute/category")
@Slf4j
public class PmsProductAttributeCategoryController {
    @Autowired
    private IPmsProductAttributeCategoryService iPmsProductAttributeCategoryService;

    @Autowired
    private IPmsProductAttributeService iPmsProductAttributeService;

    /**
     * 新增商品的类型
     * @param name
     * @return
     */
    @PostMapping("/create")
    public Result<String> create(@RequestBody String name){
        log.info("新增商品分类");
        PmsProductAttributeCategory pms = new PmsProductAttributeCategory();
        pms.setName(name);
        pms.setAttributeCount(0);
        pms.setParamCount(0);
        iPmsProductAttributeCategoryService.save(pms);
        return Result.success("商品分类添加成功");
    }

    /**
     * 分页获取所有商品属性分类
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/list")
    public Result<PmsProductPage<PmsProductAttributeCategory>> getPage(int pageNum, int pageSize){
        //分页构造器
        Page<PmsProductAttributeCategory> page1 = new Page<>(pageNum,pageSize);
//        LambdaQueryWrapper<PmsProductAttributeCategory> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.orderByAsc(PmsProductAttributeCategory::getId);

        Page<PmsProductAttributeCategory> page = iPmsProductAttributeCategoryService.page(page1);

        //创建自定义对象pmsProductPage
        PmsProductPage<PmsProductAttributeCategory> pmsProductPage = new PmsProductPage<>();
        //将page中的数据拷贝到自定义的pmsProductPage中
        BeanUtils.copyProperties(page,pmsProductPage);

        return Result.success(pmsProductPage);
    }

    /**
     * 根据id的值，修改商品类型
     * @param id
     * @return
     */
    @PostMapping("/update/{id}")
    public Result<String> selectById(@PathVariable Long id,@RequestParam String name){
        log.info("根据id的值，修改商品类型");

        LambdaUpdateWrapper<PmsProductAttributeCategory> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(PmsProductAttributeCategory::getId,id);
        updateWrapper.set(PmsProductAttributeCategory::getName,name);
        //修改id相同的对象信息
        iPmsProductAttributeCategoryService.update(updateWrapper);
        return Result.success("修改成功");
    }

    /**
     * 根据id删除商品类型
     * @param id
     * @return
     */
    @GetMapping("/delete/{id}")
    public Result<String> delete(@PathVariable int id){
        log.info("根据id删除商品类型");
        iPmsProductAttributeCategoryService.removeById(id);
        return Result.success("删除成功");
    }

    /**
     * 查询商品类型和属性的级联
     * @return
     */
    @GetMapping("/list/withAttr")
    public Result<List<ProductDto>> withAttr(){
        //查询一级分类
        List<ProductDto> productDtoList = iPmsProductAttributeCategoryService.getAll();
        //根据关联属性，查询二级分类
        for (ProductDto productDto : productDtoList) {
            LambdaQueryWrapper<PmsProductAttribute> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(PmsProductAttribute::getProductAttributeCategoryId,productDto.getId())
                    .eq(PmsProductAttribute::getType,1);
            List<PmsProductAttribute> productAttributes = iPmsProductAttributeService.list(queryWrapper);
            //设置productDto中的List集合
            productDto.setProductAttributeList(productAttributes);
        }

        return Result.success(productDtoList);
    }

}
